package com.alex.index.create;

import co.elastic.clients.elasticsearch.ElasticsearchClient;
import co.elastic.clients.elasticsearch.indices.CreateIndexResponse;
import com.alex.common.config.IndexConfig;
import com.alex.utils.EsClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@SuppressWarnings("ALL")
@RestController
@RequestMapping("/article_insertNSFCcreate")
public class A_CreateIndexNfsc_V2 {

    public static void main(String[] args) throws Exception {
        // 基金论文入库 使用的是 表 pm_ut_aid_info_0726_nsfc_hosp
        // 2024年10月12日15:25:15
        // 新的表是 nsfc_paper 在泰医上  2025年3月28日16:42:17
        start();
    }

    @GetMapping(value = "create")
    public void insert() throws Exception {
        start();
    }


    public static void start() throws Exception {

        // 创建连接
        ElasticsearchClient client = EsClient.client();
        CreateIndexResponse createIndexResponse =
                client.indices()
                        .create(c -> c.index(IndexConfig.CORE_INDEXNFSC)/*这个是Index名字,可以直接字符串*/
                                .settings(indexSettingsBuilder -> indexSettingsBuilder
                                                .numberOfReplicas("0")
                                                .numberOfShards("8")
//                                        .analysis(a -> a.filter("synonyms_filter", s -> s.definition(s1 -> s1.synonym(s2 -> s2.synonymsPath("/Users/zhangfulei/elasticsearch-8.5.1/plugins/elasticsearch-analysis-ik-8.5.1/config/custom/analysis/synonym.txt"))))
//                                                .analyzer("ik_max_word", analyzer_ik -> analyzer_ik
//                                                        .custom(kw -> kw.filter("lowercase", "synonyms_filter")
//                                                                .tokenizer("ik_max_word")))
//                                        )
                                )
                                .mappings(o -> o
                                        .properties("id", i -> i.integer(p -> p))
                                        .properties("cscd_id", i -> i.integer(p -> p))
                                        .properties("ncbi_id", i -> i.integer(p -> p))
                                        .properties("yiigle_id", i -> i.integer(p -> p))
                                        .properties("wos_id", i -> i.integer(p -> p))
                                        .properties("weipu_id", i -> i.integer(p -> p))
                                        .properties("wanfang_id", i -> i.integer(p -> p))
                                        .properties("cnki_id", i -> i.integer(p -> p))
                                        .properties("key_word_list", i -> i.text(p -> p.analyzer("ik_max_word").searchAnalyzer("ik_max_word").fields("keyword", r -> r.keyword(m -> m.normalizer("lowercase")))))
                                        .properties("pm_ut_doi_list", i -> i.text(p -> p.analyzer("ik_max_word").searchAnalyzer("ik_max_word")))
                                        .properties("journal", i -> i.text(p -> p.analyzer("ik_max_word").searchAnalyzer("ik_max_word").fields("keyword", r -> r.keyword(m -> m.normalizer("lowercase")))))
                                        .properties("aid", i -> i.integer(p -> p))
                                        .properties("citationquota", i -> i.double_(q -> q))
                                        .properties("referencequota", i -> i.double_(q -> q))

                                        .properties("ti_key", i -> i.text(p -> p.analyzer("ik_max_word").searchAnalyzer("ik_max_word")))
                                        .properties("ab_key", i -> i.text(p -> p.analyzer("ik_max_word").searchAnalyzer("ik_max_word")))
                                        .properties("kw_key", i -> i.text(p -> p.analyzer("ik_max_word").searchAnalyzer("ik_max_word")))
                                        .properties("abb_word", i -> i.text(p -> p.analyzer("ik_max_word").searchAnalyzer("ik_max_word")))

                                        .properties("zkydalei", i -> i.integer(p -> p))
                                        .properties("jcr_if", i -> i.double_(q -> q))
                                        .properties("year", i -> i.integer(p -> p))
                                        .properties("title", i -> i.text(p -> p.analyzer("ik_max_word").searchAnalyzer("ik_max_word").fields("keyword", r -> r.keyword(m -> m))))
                                        .properties("keyword", i -> i.text(p -> p.analyzer("ik_max_word").searchAnalyzer("ik_max_word").fields("keyword", r -> r.keyword(m -> m.normalizer("lowercase")))))
                                        .properties("ab", i -> i.text(p -> p.analyzer("ik_max_word").searchAnalyzer("ik_max_word")))
                                        .properties("mesh", i -> i.text(p -> p.analyzer("ik_max_word").searchAnalyzer("ik_max_word")))
                                        .properties("jid", i -> i.integer(p -> p))

                                        .properties("discussion", i -> i.text(p -> p))
                                        .properties("results", i -> i.text(p -> p))
                                        .properties("methods", i -> i.text(p -> p))
                                        .properties("background", i -> i.text(p -> p))


                                        .properties("c1_list", i -> i.text(p -> p.analyzer("ik_max_word").searchAnalyzer("ik_max_word")))
                                        .properties("c1_unit_list", i -> i.text(p -> p.analyzer("ik_max_word").searchAnalyzer("ik_max_word")))
                                        .properties("rp_list", i -> i.text(p -> p.analyzer("ik_max_word").searchAnalyzer("ik_max_word")))
                                        .properties("rp_unit_list", i -> i.text(p -> p.analyzer("ik_max_word").searchAnalyzer("ik_max_word")))
                                        .properties("cite", i -> i.text(p -> p.analyzer("ik_max_word").searchAnalyzer("ik_max_word")))

                                        .properties("cn_ti", i -> i.text(p -> p.analyzer("ik_max_word").searchAnalyzer("ik_max_word").fields("keyword", r -> r.keyword(m -> m.normalizer("lowercase")))))
                                        .properties("cn_ab", i -> i.text(p -> p.analyzer("ik_max_word").searchAnalyzer("ik_max_word")))
                                        .properties("cn_kw", i -> i.text(p -> p.analyzer("ik_max_word").searchAnalyzer("ik_max_word")))
                                        .properties("cn_type", i -> i.text(p -> p.analyzer("ik_max_word").searchAnalyzer("ik_max_word")))
                                        .properties("pt", i -> i.text(p -> p.analyzer("ik_max_word").searchAnalyzer("ik_max_word").fields("keyword", r -> r.keyword(m -> m.normalizer("lowercase")))))

                                        .properties("cn_country", i -> i.text(p -> p.analyzer("ik_max_word").searchAnalyzer("ik_max_word").fields("keyword", r -> r.keyword(m -> m.normalizer("lowercase")))))
                                        .properties("cn_unit", i -> i.text(p -> p.analyzer("ik_max_word").searchAnalyzer("ik_max_word").fields("keyword", r -> r.keyword(m -> m.normalizer("lowercase")))))
                                        .properties("is_cns", i -> i.integer(p -> p))
                                        .properties("cn_fund", i -> i.text(p -> p.analyzer("ik_max_word").searchAnalyzer("ik_max_word")))
                                        .properties("cn_country_1", i -> i.text(p -> p.analyzer("ik_max_word").searchAnalyzer("ik_max_word")))
                                        .properties("cn_unit_1", i -> i.text(p -> p.analyzer("ik_max_word").searchAnalyzer("ik_max_word")))
                                        .properties("unit_standard", i -> i.text(p -> p.analyzer("ik_max_word").searchAnalyzer("ik_max_word")))

                                        .properties("pmid", i -> i.integer(p -> p))
                                        .properties("ut", i -> i.text(p -> p))
                                        .properties("doi", i -> i.text(p -> p.analyzer("ik_max_word").searchAnalyzer("ik_max_word").fields("keyword", r -> r.keyword(m -> m.normalizer("lowercase")))))
                                        // .properties("utdoi", i -> i.text(p -> p.analyzer("ik_max_word").searchAnalyzer("ik_max_word").fields("keyword", r -> r.keyword(m -> m.normalizer("lowercase")))))
                                        .properties("nlmid", i -> i.text(p -> p.analyzer("ik_max_word").searchAnalyzer("ik_max_word")))

                                        .properties("cite_score", i -> i.double_(q -> q))
                                        .properties("jcr_quartile", i -> i.integer(p -> p))
                                        .properties("fund", i -> i.text(p -> p))
                                        .properties("fund_list", i -> i.text(p -> p.analyzer("ik_max_word").searchAnalyzer("ik_max_word")))
                                        .properties("fund_standard", i -> i.text(p -> p.analyzer("ik_max_word").searchAnalyzer("ik_max_word")))
                                        .properties("method_info", i -> i.text(p -> p.analyzer("ik_max_word").searchAnalyzer("ik_max_word")))
                                        .properties("trans_ok", i -> i.integer(p -> p))
                                        //药物
                                        .properties("drug", i -> i.text(p -> p.analyzer("ik_max_word").searchAnalyzer("ik_max_word").fields("keyword", r -> r.keyword(m -> m.normalizer("lowercase")))))
                                        //基因
                                        .properties("gene", i -> i.text(p -> p.analyzer("ik_max_word").searchAnalyzer("ik_max_word").fields("keyword", r -> r.keyword(m -> m.normalizer("lowercase")))))
                                        //通路
                                        .properties("pathway", i -> i.text(p -> p.analyzer("ik_max_word").searchAnalyzer("ik_max_word").fields("keyword", r -> r.keyword(m -> m.normalizer("lowercase")))))
                                        //疾病
                                        .properties("disease", i -> i.text(p -> p.analyzer("ik_max_word").searchAnalyzer("ik_max_word").fields("keyword", r -> r.keyword(m -> m.normalizer("lowercase")))))
                                        .properties("author", i -> i.text(p -> p.analyzer("ik_max_word").searchAnalyzer("ik_max_word").fields("keyword", r -> r.keyword(m -> m.normalizer("lowercase")))))
                                        .properties("auth", i -> i.text(p -> p.analyzer("ik_max_word").searchAnalyzer("ik_max_word").fields("keyword", r -> r.keyword(m -> m.normalizer("lowercase")))))
                                        .properties("unit", i -> i.text(p -> p.analyzer("ik_max_word").searchAnalyzer("ik_max_word").fields("keyword", r -> r.keyword(m -> m.normalizer("lowercase")))))
                                        .properties("dept", i -> i.text(p -> p.analyzer("ik_max_word").searchAnalyzer("ik_max_word").fields("keyword", r -> r.keyword(m -> m.normalizer("lowercase")))))
                                        .properties("unit_dept", i -> i.text(p -> p.analyzer("ik_max_word").searchAnalyzer("ik_max_word")
                                                .fields("keyword", r -> r.keyword(m -> m.normalizer("lowercase")))
                                                .fields("wildcard", v -> v.wildcard(a -> a))
                                        ))
                                        .properties("sort_auth", i -> i.text(p -> p.analyzer("ik_max_word").searchAnalyzer("ik_max_word")))
                                        .properties("info", i -> i.text(p -> p.analyzer("ik_max_word").searchAnalyzer("ik_max_word")))

                                        // 老板设置的11个分类 目前有的
                                        // auth 作者采用list 格式 wei qiang(四川大学华西医院)
                                        //journal 有了
                                        //keyWord 有了
                                        //dept  重新搞
                                        //unit  重新搞
                                        //year  有了
                                        //zkyDaLei  有了
                                        //drug 有了
                                        //gene 有了
                                        //pathway 有了
                                        //disease 有了

                                        .properties("is_retraction", i -> i.integer(p -> p))
                                        .properties("is_china", i -> i.integer(p -> p))

                                        .properties("cn_discussion", i -> i.text(p -> p))
                                        .properties("cn_results", i -> i.text(p -> p))
                                        .properties("cn_methods", i -> i.text(p -> p))
                                        .properties("cn_background", i -> i.text(p -> p))
                                        .properties("cs_sjr", i -> i.double_(q -> q))
                                        .properties("is_beida", i -> i.integer(p -> p))
                                        .properties("is_cs", i -> i.integer(p -> p))
                                        .properties("is_cscd", i -> i.integer(p -> p))
                                        .properties("is_jcr", i -> i.integer(p -> p))
                                        .properties("is_pubmed", i -> i.integer(p -> p))
                                        .properties("is_tjy", i -> i.integer(p -> p))
                                        .properties("is_yiigle", i -> i.integer(p -> p))
                                        .properties("is_zky", i -> i.integer(p -> p))

                                        .properties("zky_subject", i -> i.text(p -> p.analyzer("ik_max_word").searchAnalyzer("ik_max_word")))

                                        .properties("is_core", i -> i.integer(p -> p))
                                ));

        // 打印结果
        System.out.println(createIndexResponse.acknowledged());
        EsClient.clientOff();

    }


}
